package com.zs.letcode.illustration_of_algorithm;

/**
 * 剑指 Offer 58 - II. 左旋转字符串
 * 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如，输入字符串"abcdefg"和数字2，该函数将返回左旋转两位得到的结果"cdefgab"。
 * <p>
 * <p>
 * 示例 1：
 * <p>
 * 输入: s = "abcdefg", k = 2
 * 输出:"cdefgab"
 * 示例 2：
 * <p>
 * 输入: s = "lrloseumgh", k = 6
 * 输出:"umghlrlose"
 * <p>
 * 限制：
 * <p>
 * 1 <= k < s.length <= 10000
 * 相关标签
 * 数学
 * 双指针
 * 字符串
 * <p>
 * Java
 * <p>
 * 作者：Krahets
 * 链接：https://leetcode-cn.com/leetbook/read/illustration-of-algorithm/589fz2/
 * 来源：力扣（LeetCode）
 * 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
 *
 * @author madison
 * @description
 * @date 2021/8/10 18:09
 */
public class Chapter8 {
    public static void main(String[] args) {

    }

    private class Solution {
        public String reverseLeftWords(String s, int n) {
            int len = s.length();
            n = n % len;
            if (n == 0) return s;
            char[] chars = new char[len];
            int index = 0;
            for (int i = n; i < len; i++) {
                chars[index++] = s.charAt(i);
            }
            for (int i = 0; i < n; i++) {
                chars[index++] = s.charAt(i);
            }
            return new String(chars, 0, index);
        }

        /**
         * 方法一：字符串切片
         */
        public String reverseLeftWords1(String s, int n) {
            return s.substring(n) + s.substring(0, n);
        }

        /**
         * 方法二：列表遍历拼接
         */
        public String reverseLeftWords2(String s, int n) {
            StringBuilder res = new StringBuilder();
            for (int i = n; i < s.length(); i++) {
                res.append(s.charAt(i));
            }
            for (int i = 0; i < n; i++) {
                res.append(s.charAt(i));
            }
            return res.toString();
        }

        public String reverseLeftWords3(String s, int n) {
            StringBuilder res = new StringBuilder();
            for (int i = n; i < n + s.length(); i++)
                res.append(s.charAt(i % s.length()));
            return res.toString();
        }
    }
}
